"""
此模块用于测试红绿灯模块功能。程序会依次点亮红灯、绿灯、黄灯，并控制每个灯的点亮时长，模拟红绿灯的正常工作流程。
导入库：导入 gpiozero 库中的 LED 类用于控制红绿灯，time 库用于控制灯的点亮时长。
初始化红绿灯：定义红绿灯连接的 GPIO 引脚号，使用 LED 类分别初始化红灯、黄灯、绿灯对象。
定义点亮时长：设置红灯、黄灯、绿灯的点亮时长。
定义测试函数：test_traffic_lights 函数中，使用无限循环依次点亮红灯、绿灯、黄灯，每个灯点亮后保持相应时长。
异常处理：使用 try-except-finally 结构捕获 KeyboardInterrupt 异常（即用户按下 Ctrl+C），确保程序终止时所有灯关闭。
主程序：调用 test_traffic_lights 函数开始测试。
"""
from gpiozero import LED
import time

# 定义红绿灯连接的 GPIO 引脚
RED_PIN = 18
YELLOW_PIN = 16
GREEN_PIN = 17

# 初始化红绿灯
red_led = LED(RED_PIN)
yellow_led = LED(YELLOW_PIN)
green_led = LED(GREEN_PIN)

# 定义每个灯的点亮时长（秒）
RED_DURATION = 5
YELLOW_DURATION = 2
GREEN_DURATION = 5

def test_traffic_lights():
    """
    测试红绿灯模块功能，依次点亮红灯、绿灯、黄灯。
    """
    try:
        print("开始测试红绿灯模块...")
        while True:
            # 点亮红灯
            red_led.on()
            yellow_led.off()
            green_led.off()
            print("红灯亮起")
            time.sleep(RED_DURATION)

            # 点亮绿灯
            red_led.off()
            yellow_led.off()
            green_led.on()
            print("绿灯亮起")
            time.sleep(GREEN_DURATION)

            # 点亮黄灯
            red_led.off()
            yellow_led.on()
            green_led.off()
            print("黄灯亮起")
            time.sleep(YELLOW_DURATION)

    except KeyboardInterrupt:
        print("用户中断测试，程序终止。")
    finally:
        # 确保所有灯关闭
        red_led.off()
        yellow_led.off()
        green_led.off()

if __name__ == "__main__":
    test_traffic_lights()
